package com.xbts.common.utils;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xbts.common.utils.reflect.ReflectUtils;

import java.util.Map;

/**
 * @Author llk
 * @Date 2023/9/14 16:10
 */
public class QueryWrapperUtil {

    /**
     * 获取QueryWrapper
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> QueryWrapper<T> getQueryWrapper(T clazz) {
        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
        Object params = ReflectUtils.invokeGetter(clazz, "params");

        if (StringUtils.isNotNull(params)) {
            Map<String, Object> map = (Map<String, Object>) params;
            if (null != map.getOrDefault("startTime", "")
                    && StringUtils.isNotEmpty(map.getOrDefault("startTime", "") + "")) {
                queryWrapper.ge("create_time", map.get("startTime"));
            }
            if (null != map.getOrDefault("endTime", "")
                    && StringUtils.isNotEmpty(map.getOrDefault("endTime", "") + "")) {
                queryWrapper.le("create_time", map.get("endTime"));
            }
        }
        return queryWrapper;
    }

    /**
     * 通过别名获取QueryWrapper
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> QueryWrapper<T> getQueryWrapperByAliasName(T clazz) {
        QueryWrapper<T> queryWrapper = new QueryWrapper<>();
        Object params = ReflectUtils.invokeGetter(clazz, "params");
        // 组装表的别名
        String aliasName = clazz.getClass().getSimpleName();
        // 只取大写字母
        aliasName = aliasName.replaceAll("[^A-Z]", "").toLowerCase() + ".";

        if (StringUtils.isNotNull(params)) {
            Map<String, Object> map = (Map<String, Object>) params;
            if (null != map.getOrDefault("startTime", "")
                    && StringUtils.isNotEmpty(map.getOrDefault("startTime", "") + "")) {
                queryWrapper.ge(aliasName + "create_time", map.get("startTime"));
            }
            if (null != map.getOrDefault("endTime", "")
                    && StringUtils.isNotEmpty(map.getOrDefault("endTime", "") + "")) {
                queryWrapper.le(aliasName + "create_time", map.get("endTime"));
            }
        }
        return queryWrapper;
    }
}
